package com.rainbow.support.common.annotation.lock;

import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @author 傅为地
 * redisson分布式锁注解
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LockAction {

	/** 锁的资源，key。支持spring El表达式，如果不赋值，默认取类名+方法名*/
	@AliasFor("key")
	String value() default "";

	@AliasFor("value")
	String key() default "";

	/** 获取锁等待时间，默认60秒*/
	long waitTime() default  60L;

	/** 持锁时间 单位秒,默认-1L时,达到等待时间,看门狗会自动续期。若不为-1,则达到持锁时间后,看门狗不会续期,锁自动到期*/
	long holdTime() default -1L;

	/** 时间单位（获取锁等待时间和持锁时间都用此单位）*/
	TimeUnit unit() default TimeUnit.SECONDS;

	/** 锁类型*/
	LockType lockType() default LockType.REENTRANT_LOCK;

	/** 生成锁的key方式 */
	LockKeyType lockKeyType() default LockKeyType.SPLITER;

	/** 是否自定义键,启用后,将生成固定的锁的key即为customKey值*/
	String customKey()  default "";

	/** 生成key的分隔符 */
	String separator()  default ":";

	/** redis锁提示消息 */
	String message()  default "系统正在处理中,请耐心等待........";

}
